package com.example.demo.hot100;

/**
 * @Classname no14
 * @Description
 * @Date 2023/12/21 9:57
 * @Created by jyl
 *
 * 找到字符串数组中的最长公共前缀字符串。
 *
 * 该方法以第一个字符串为初始前缀，然后逐一比较每个字符串，更新前缀。如果遇到不匹配的字符或者前缀为空，就返回当前的前缀。最终得到的前缀即为最长公共前缀。
 *
 * 在 main 方法中，你可以修改 strings 数组的值并运行程序来测试不同的字符串数组的最长公共前缀。在上述代码中，例子是字符串数组 {"flower", "flow", "flight"}。
 */
public class no14 {

    public static String longestCommonPrefix(String[] strs) {
        // 如果传入的数组为空或者长度为0，则直接返回空字符串
        if (strs == null || strs.length == 0) {
            return "";
        }

        // 将第一个字符串作为初始前缀
        String prefix = strs[0];

        // 遍历数组中的每个字符串，更新前缀
        for (int i = 1; i < strs.length; i++) {
            int j = 0;
            // 比较当前字符串和前缀，更新前缀
            while (j < prefix.length() && j < strs[i].length() && prefix.charAt(j) == strs[i].charAt(j)) {
                j++;
            }
            prefix = prefix.substring(0, j);

            // 如果前缀为空，则说明没有公共前缀，直接返回
            if (prefix.isEmpty()) {
                return "";
            }
        }

        return prefix;
    }

    public static void main(String[] args) {
        // Example usage:
        String[] strings = {"flower", "flow", "flight","flightless"};
        String commonPrefix = longestCommonPrefix(strings);
        System.out.println("Longest common prefix: " + commonPrefix);
    }
}
